import {CollectionWithTabsDto} from '@/api/types';
import {SpaceCollection} from '@/types';

/**
 * 将后端返回的 CollectionWithTabsDto 转换为前端使用的 SpaceCollection 视图模型。
 */
export function mapCollectionDtoToView(dto: CollectionWithTabsDto): SpaceCollection {
    return {
        spaceId: dto.binding.space_id,
        collectionId: dto.collection.id,
        position: dto.binding.position,
        collection: {
            id: dto.collection.id,
            name: dto.collection.name,
            createdAt: new Date(dto.collection.created_at).getTime(),
            updatedAt: new Date(dto.collection.updated_at).getTime(),
        },
        tabs: dto.items.map((item) => ({
            id: item.id,
            collectionId: item.collection_id,
            url: item.url,
            title: item.title,
            domain: item.domain,
            favicon: item.favicon,
            isPinned: item.is_pin,
            position: item.position,
            createdAt: new Date(item.created_at).getTime(),
            updatedAt: new Date(item.updated_at).getTime(),
        })),
    };
}

/**
 * 批量转换 DTO 列表。
 */
export function mapCollectionsDtoToView(dtos: CollectionWithTabsDto[]): SpaceCollection[] {
    return dtos.map(mapCollectionDtoToView);
}

/**
 * 根据搜索关键词过滤集合。如果关键词为空或仅空白字符，则返回原数组。
 */
export function filterSpaceCollections(collections: SpaceCollection[], rawQuery: string): SpaceCollection[] {
    const query = rawQuery.trim().toLowerCase();
    if (!query) {
        return collections;
    }

    return collections.filter((collection) => {
        if (collection.collection.name.toLowerCase().includes(query)) {
            return true;
        }

        return collection.tabs.some(
            (tab) => tab.title.toLowerCase().includes(query) || tab.url.toLowerCase().includes(query)
        );
    });
}

/**
 * 计算集合列表中的标签总数。
 */
export function countTabs(collections: SpaceCollection[]): number {
    return collections.reduce((sum, collection) => sum + collection.tabs.length, 0);
}
